reduce 很常用在計算累加上面。
之前介紹的方法,大多都是將陣列的值一個一個放進 callback 函式做計算,接著回傳新陣列
reduce 則是將每次放進 callback 函式計算完的值,再一次一次放進 callback 函式計算,最後再回傳一個值出來。
reduce 可以將原陣列的元素,由左至右,從第一個到最後一個,一個一個傳進 callback 函式做計算,同時也將每一次計算完的值,一次一次地傳進 callback 函式
簡單範例:
var a=[1,2,3,4,5,6,7,8];
var b=a.reduce(function(sum,e){
return sum+e;
})
console.log(a); // [1,2,3,4,5,6,7,8]
console.log(b); // 36 (1+2+3+4+5+6+7+8)
參數 sum 就是上一次計算完的結果
可以印出來看看
var a=[1,2,3,4,5,6,7,8];
var b=a.reduce(function(sum,e){
console.log(sum); // 印出 1,3,6,10,15,21,28,36
return sum+e;
})
console.log(a); // [1,2,3,4,5,6,7,8]
console.log(b); // 36 (1+2+3+4+5+6+7+8)
會印出
1
3 (1+2)
6 (3+3)
10 (6+4)
15 (10+5)
21 (15+6)
28 (21+7)
36 (28+8)
語法:
reduce 會將元素以及 callback 函式運算的結果,一次一次傳進 callback 函式做計算
calback 函式有四種參數
另外 callback 函式後面還可以放一個參數
Array.reduce(function callback(accumulator,currentValue,currentIndex,array){
// return
},initailValue)